//package com.tfswx.jcyw.dmzc.component
//
//import a.d.b.A
//import com.intellij.ui.components.JBCheckBox
//import com.tfswx.jcyw.dmzc.component.AbstractFilterPopup.SelectAble
//import java.awt.BorderLayout
//import java.awt.GridLayout
//import java.awt.event.ActionEvent
//import java.util.function.Consumer
//import javax.swing.JButton
//import javax.swing.JCheckBox
//import javax.swing.JPanel
//import javax.swing.JPopupMenu
//
///**
// * @author ricky
// * @date 2022/10/21
// */
//class AbstractFilterPopup<T : SelectAble?>(private val values: Map<String, T>) : JPopupMenu() {
//    private val checkBoxList: ArrayList<JBCheckBox> = ArrayList()
//    private var consumer: Consumer<T>? = null
//
//    init {
//        initComponent()
//    }
//
//    private fun initComponent() {
//        val checkboxPane = JPanel()
//        val buttonPane = JPanel()
//        this.layout = BorderLayout()
//        checkboxPane.layout = GridLayout(values.size, 1, 3, 3)
//        for ((k, v) in values) {
//            val checkBox = JBCheckBox(v!!.text, v.isSelected)
//            checkBox.addActionListener { e: ActionEvent? ->
//                v.isSelected = checkBox.isSelected
//                if (consumer != null) {
//                    consumer!!.accept(v)
//                }
//            }
//            checkBoxList.add(checkBox)
//            checkboxPane.add(checkBox)
//        }
//        val selectAll = JButton("全选")
//        selectAll.addActionListener { e: ActionEvent? ->
//            if (selectedValues.size < checkBoxList.size) {
//                val changes: MutableList<T?> = ArrayList()
//                for (i in checkBoxList.indices) {
//                    val checkBox: JCheckBox = checkBoxList[i]
//                    if (!checkBox.isSelected) {
//                        checkBox.isSelected = true
//                        changes.add(values.get(checkBox.text))
//                    }
//                }
//                for (item in changes) {
//                    item!!.isSelected = true
//                    if (consumer != null) {
//                        consumer!!.accept(item)
//                    }
//                }
//            }
//        }
//        buttonPane.add(selectAll)
//        val unSelectAll = JButton("取消全选")
//        unSelectAll.addActionListener { e: ActionEvent? ->
//            val changes: ArrayList<T?> = ArrayList()
//            for (i in checkBoxList.indices) {
//                val checkBox: JCheckBox = checkBoxList[i]
//                if (checkBox.isSelected) {
//                    checkBox.isSelected = false
//                    changes.add(values.get(checkBox.text))
//                }
//            }
//            for (item in changes) {
//                item!!.isSelected = false
//                if (consumer != null) {
//                    consumer!!.accept(item)
//                }
//            }
//        }
//        buttonPane.add(unSelectAll)
//        val close = JButton("关闭")
//        close.addActionListener { e: ActionEvent? -> setVisible(false) }
//        buttonPane.add(close)
//        this.add(checkboxPane, "Center")
//        this.add(buttonPane, "South")
//    }
//
//    val selectedValues: List<T?>
//        get() {
//            val selectedValues: MutableList<T?> = ArrayList()
//            for (i in checkBoxList.indices) {
//                val checkBox = checkBoxList[i]
//                if (checkBox.isSelected) {
//                    selectedValues.add(values.get(checkBox.text))
//                }
//            }
//            return selectedValues
//        }
//
//    fun onChange(consumer: Consumer<T>) {
//        this.consumer = consumer
//    }
//
//    open class SelectAble {
//        var isSelected = false
//        var text: String? = null
//    }
//}